/***************************************************************************//**
 * @file	 csa37f7x_nvic.h
 * @version  V1.0.0
 * @author	 Chipsea MCU Group
 * @date	 2020-10-23 PM
 * @brief	 该文件包含了NVIC各功能参数的定义和函数接口声明
 * 
 * @copyright Copyright (C) 2020 Chipsea Technologies Corp. All rights reserved.
 ****************************************************************************
* @attention
 *	硬件平台: CSA37F70 评估板V1.0 \n
 *	SDK版本：  CSA37F7X_SDK_1.0.0
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date 	   <th>Version	<th>Author				<th>Description
 * <tr><td>2020/10/21  <td>1.0.0	<td>Chipsea MCU Group	<td>创建初始版本
 * </table>
 *
 *****************************************************************************/

#ifndef __CSA37F7X_NVIC_H__
#define __CSA37F7X_NVIC_H__

// Include external header file.
#include "csa37f7x.h"
#ifdef __cplusplus
extern "C" {
#endif

/** @addtogroup NVIC 中断系统(NVIC)
  Cortex-M0 CPU内核提供一个中断控制器作为异常模型的完整部分, 命名为“递归向量中断控制
器 (NVIC)。<br>
###特性: 
    - 支持递归和向量中断
    - 自动处理器状态保存和恢复
    - 动态优先级改变
    - 降低中断延迟，并且延迟时间确定
  @{
*/


/**
  * @brief 中断号选择
  */
typedef enum
{
		IRQ_PVD_INT 	=	BIT(0),
		IRQ_WWDG_INT	=	BIT(1),
		IRQ_TMR0_INT	=	BIT(2),
		IRQ_TMR1_INT	=	BIT(3),
#ifdef	__CSA37F70__
		IRQ_UART_INT	=	BIT(4),
#endif
		IRQ_I2C_INT 	=	BIT(5),
		IRQ_AFE_INT 	=	BIT(6),
		IRQ_PA_INT		=	BIT(7),
		IRQ_WK_INT		=	BIT(8),
#ifdef	__CSA37F70__
		IRQ_RCC_INT0	=	BIT(9),
#else
		IRQ_USART_INT	=	BIT(10),
#endif		
		IRQ_FAULT_INT	=	BIT(11),
		IRQ_PB_INT		=	BIT(12),
#ifdef	__CSA37F70__
		IRQ_TK_INT		=	BIT(13),
#endif
}irq_int_source_t;

/**
  * @brief 中断源选择
  */
typedef enum
{
	IRQ_SOURCE_PVD   = 0x00,
	IRQ_SOURCE_WWDG  = 0x01,
	IRQ_SOURCE_TMR0  = 0x02,
	IRQ_SOURCE_TMR1  = 0x03,
#ifdef __CSA37F70__
	IRQ_SOURCE_UART  = 0x04,
#endif
	IRQ_SOURCE_I2C   = 0x05,
	IRQ_SOURCE_AFE   = 0x06,
	IRQ_SOURCE_PA    = 0x07,
	IRQ_SOURCE_WK    = 0x08,
#ifdef __CSA37F70__
	IRQ_SOURCE_RCC   = 0x09,
#else
    IRQ_SOURCE_USART = 0x0A,
#endif 
	IRQ_SOURCE_FAULT = 0x0B,
	IRQ_SOURCE_PB    = 0x0C,
#ifdef __CSA37F70__
	IRQ_SOURCE_TK    = 0x0D,
#endif
}nvic_irq_source_t;

/**@brief		NVIC中断使能配置

 *@param[in]    IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@return		无
*/
void nvic_irqx_enable(irq_int_source_t IRQ_x);

/**@brief		NVIC中断禁用配置

 *@param[in]    IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@return		无
*/
void nvic_irqx_disable(irq_int_source_t IRQ_x);

/**@brief		NVIC中断挂起配置

 *@param[in]    IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@return		无
*/
void nvic_irqx_pending_set(irq_int_source_t IRQ_x);

/**@brief		NVIC中断挂起清除配置

 *@param[in]    IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@return		无
*/
void nvic_irqx_pending_clear(irq_int_source_t IRQ_x);

/**@brief		NVIC中断优先级配置

 *@param[in]    IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@param[in]    priority	中断优先级选择，0 表示最高的优先级 & 3 表示最低的优先级.
 *@return		无
*/
void nvic_irq_priority_set(irq_int_source_t IRQ_x , uint8_t priority);

/**@brief		NVIC中断源选择配置

 *@param[in]	IRQ_x		中断号选择，范围见irq_int_source_t定义
 *@param[in]	NewState	NMI中断中断源使能
 *					1		使能NMI中断
 *					0		禁止NMI中断
 *@return		无
*/
void nvic_nmi_irq_source_set(irq_int_source_t IRQ_x, enable_state_t NewState);


/**@brief		NVIC中断源状态查询

 *@param[in]	flag		中断源选择，范围见nvic_irq_source_t定义
 *@return		返回NVIC中断源状态
*/
uint8_t nvic_irq_source_status_get(nvic_irq_source_t flag);


/*@}*/ /* end of group NVIC */

#ifdef __cplusplus
}
#endif

#endif  //__CSA37F7X_NVIC_H__

/*** (C) COPYRIGHT 2020 Chipsea Technologies (Shenzhen) Corp. ***/




